#pragma once

/*-----------------------------------------------------------------*\
	
	Drawable define a object looks like 2D images.
	It can draw itself to other Drawable objects

	BindTexture() is used for implement detail.
	Blt() and Clear() is used for operate images.
	
	GetHeight() and GetWidth() return the property of image size.

\*-----------------------------------------------------------------*/

#include <string>

namespace Core
{
	struct Rect;
};
using Core::Rect;

namespace Graphics
{
	class BltInfo;
	struct Font;
	class Color;

	class Drawable
	{
	public:
		Drawable(void);
		virtual ~Drawable(void) = 0;
	
		virtual bool BindTexture(void) = 0;
		
		virtual bool Blt(Drawable* pSrc, 
						 const Rect* pSrcRect,
						 const Rect* pDestRect, 
						 const BltInfo* pBltInfo) = 0;

		virtual bool Clear(Rect* const pRect = 0,unsigned long color = 0) = 0;

		virtual int GetHeight(void) = 0 ;
		virtual int GetWidth(void) = 0;

		virtual bool TextDraw(const std::wstring& text,
							  const Font& font,
							  const Rect& destRect) = 0;
	};
}